![]() |
![]() |
|
rtk 20182018.1.2 - zamenjaj vrstice1. podnalogaPalček Godrnjavček je postal vodja tajne službe, ki skrbi za varnost Sneguljčice, njegova naloga pa je, da sprejema podatke agentov na terenu in jim daje navodila, kako naj ukrepajo. Da bi se palčki zaščitili pred napakami pri sporazumevanju, so uvedli fonetično abecedo, ki posamezni črki priredi besedo.
Godrnjavček je napisal funkcijo, ki zna vneseno besedilo dekodirati. Kot vhod torej dobi datoteko s seznamom kodnih besed iz gornje tabele (vsaka v svoji vrstici), vrne pa pripadajoče zaporedje črk. Pri tem je odporna tudi na manjše napake pri kodiranju: namesto prave kodne besede se lahko v vhodnih podatkih pojavi taka beseda, ki se od prave razlikuje v največ enem znaku (je pa zagotovo še vedno enako dolga kot prava kodna beseda). Tako se lahko na primer zgodi, da namesto besede LIMA dobimo RIMA ali LINA ali LQMA in tako naprej, vse te besede pa ravno tako predstavljajo črko L. Na žalost pa je zlobna kraljica uporabila urok, ki je Godrnjavčkovu funkciji premešal vrstice.
NalogaZamenjaj vrstice v funkcijah Vhodni podatkiTekstovna datoteka z zakodiranim sporočilom z napakami:
Izhodni podatkiNiz z dekodiranim sporočilom
KomentarNa tekmovanju je bilo možno izbirati med branjem s standardnega vhoda in branjem z datoteke. Uradna rešitevkode = ["ALFA", "BRAVO", "CHARLIE" , "DELTA", "ECHO","FOXTROT","GOLF","HOTEL","INDIA","JULIET", "KILO","LIMA","MIKE","NOVEMBER","OSCAR","PAPA","QUEBEC","ROMEO","SIERRA","TANGO","UNIFORM", "VICTOR","WHISKY","X-RAY","YANKEE","ZULU"] def se_ujema(beseda, koda): '''Funkcija preveri, ali se dana beseda ujema s kodo (z največ 1 napako) in vrne True ali False''' dolzina_besede = len(beseda) st_neujemanj = 0 if len(koda) != dolzina_besede: return False for i in range(dolzina_besede): if beseda[i] == koda[i]: continue st_neujemanj += 1 if st_neujemanj > 1: return False return True def dekodiraj(dat): '''Funkcija pretvori zakodirano sporočilo v datoteki v nam razumljivo, jo shrani v niz in vrne.''' dekodirana_beseda = '' sporocilo = open(dat,'r',encoding='utf-8') for vrstica in sporocilo: for beseda in vrstica.split(): for znak in range(len(kode)): if se_ujema(beseda, kode[znak]): dekodirana_beseda += (chr(ord('A') + znak)) break sporocilo.close() return dekodirana_beseda 2018.1.3 - zamenjaj vrsticeSestavljanka 1. podnalogaGojmir je na polici opazil škatlo s sestavljanko, ki ima Koliko koščkov v resnici pride po višini in koliko po širini? Pravokotnik iz Vprašanje je torej, pri katerem od teh pravokotnikov je razmerje med višino in širino najbližje tistemu, ki ga je ocenil Gojmir. Gojmir je že napisal funkcijo, ki to naredi v splošnem, vendar so se ob prenosu zamenjale vrstice kode.
NalogaZamenjaj vrstice v funkciji Vhodni podatkiParametra funkcije sta število koščkov (naravno število) in razmerje (realno število)
Izhodni podatkiFunkcija mora vrniti par
(8 vrstic, 17 stolpcev). Pri tej sestavljanki je razmerje med višino in širino enako
Uradna rešitevdef sestavljanka(st_kosov, razmerje): '''Izračuna in vrne tisti približek za razmerje višina:širina, ki je najbljižje razmerju ''' for h in range(1, st_kosov + 1): if st_kosov % h != 0: continue priblizek = st_kosov // h razlika = abs(h / priblizek - razmerje) if h == 1 or razlika < min_razlika: naj_visina = h min_razlika = razlika return (naj_visina, st_kosov // naj_visina) 2018.1.5 - zamenjaj vrsticeBrzinomer 1. podnalogaV avtomobilu za prikaz trenutne hitrosti vozila skrbi instrument (brzinomer), ki je lahko digitalen (prikazuje številke) ali pa analogen (fizični kazalec instrumenta se pomika po skali in s svojo lego kaže izmerjeno hitrost). A tudi prikazovalniki s kazalcem in skalo so doživeli svojo prenovo in niso več preprosti analogni merilniki neke fizikalne veličine, ampak gre za prikazovalnike, kjer je kazalec pritrjen na os miniaturnega koračnega elektromotorčka, pomike tega pa krmili avtomobilski računalnik glede na hitrost, ki jo izmerijo tipala hitrosti. Naš prikazovalnik ima skalo v obsegu od Premik koračnega motorčka za en korak (oz. kazalca, pritrjenega nanj, za Naloga
Zamenjaj vrstice v funkciji Glede na svoje vedenje o trenutni legi kazalca brzinomera naj funkcija vrne
vrednost Upoštevaj, da se lahko hitrost avtomobila med dvema zaporednima klicema tvoje funkcije
spremeni tudi za več kot Upoštevaj tudi, da ob zagonu avtomobilskega računalnika ne vemo točno, kje je
obtičal kazalec brzinomera — lahko bi se npr. zgodilo, da je bil motor avtomobila (in
računalnik) ugasnjen, še preden se je avtomobil dokončno ustavil na domačem dvorišču.
Da zagotovimo znano lego kazalca, si lahko pomagamo z informacijo iz drugega odstavka,
ki zagotovi, da z
ko napišeš funkcijo. Uradna rešitevMax = 250 kazalec = 0 zacetek = Max def premik(hitrost): '''Premakne kazalec za 1 naprej, če je hitrost povečana in nazaj če je zmanjšana.''' global kazalec, zacetek if zacetek > 0: zacetek -= 1 return -1 if hitrost < 0: hitrost = 0 if hitrost > Max: hitrost = Max if hitrost > kazalec: premik = 1 elif hitrost < kazalec: premik = -1 else: premik = 0 kazalec += premik return premikMesto objave ob koncu projekta 15.9.2018 |